假设您希望确保所有员工均属于一个有效的部门。这就是所谓的维护数据的引用完整性。在十分简单的数据库系统中,这将通过以下方法实现(如果可行):先查看 dept 表以检查是否存在匹配的记录,然后插入或拒绝新员工记录。这种方法存在许多问题,而且非常不方便。PolarDB PostgreSQL版(兼容Oracle)可让您更轻松地工作。
本节中显示了 emp 表(在第 2.1.2 节中进行了介绍)的修改后版本,其中新增了外键约束。修改后的 emp 表如下所示:
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
如果尝试在示例 emp 表中发出以下 INSERT 命令,则外键约束 emp_ref_dept_fk 可确保 dept 表中存在部门 50。由于不存在该部门,该命令被拒绝。
INSERT INTO emp VALUES (8000,'JONES','CLERK',7902,'17-AUG-07',1200,NULL,50);
ERROR: insert or update on table "emp" violates foreign key constraint "emp_ref_dept_fk"
DETAIL: Key (deptno)=(50) is not present in table "dept".
外键约束的行为可根据应用程序进行微调。正确使用外键确实会提高数据库应用程序的质量,因此强烈建议您更多地了解它们。